package linkedlist;
import java.util.Iterator;
import java.util.LinkedList;
/**
 * Created by L.jp
 * Description:
 * User: 86189
 * Date: 2022-10-08
 * Time: 22:04
 */
//LinkedList常用方法  ：LinkedList底层为双向链表
public class Test_CommonMethod {
    public static void main(String[] args) {
        /*
        LinkedList常用方法：
        增加 addFirst(E e) addLast(E e)  add(E e)  push(E e)
             offer(E e) offerFirst(E e) offerLast(E e)
        删除 poll() --->删除列表头   clear()  pop()
            pollFirst() pollLast()  ---》JDK1.6以后新出的方法，提高了代码的健壮性
            removeFirst() 删除并返回第一个元素。  removeLast()  删除并返回最后一个元素。     remove()-->删除列表头
        修改  set(int index, E element)  用指定的元素替换此列表中指定位置的元素
        查看 element()    peek()   peekFirst()   peekLast()   contains(Object o)
             getFirst()  getLast()
             indexOf(Object o)   lastIndexOf(Object o)
             size()  返回此列表中的元素数
         */
    
        LinkedList<Integer> list=new LinkedList<>();
        System.out.println("=========增=========");
        list.add(2);  //返回值boolean
        list.addFirst(1);  //无返回值
        list.addLast(3); //无返回值
        list.push(4);  //在这个列表的前面插入元素。无返回值
        list.offer(5); //添加指定元素作为此列表的尾部（最后一个元素） 返回boolean
        list.offerFirst(0); // 在此列表的前面插入指定的元素 返回boolean值
        list.offerLast(6);  //在此列表的末尾插入指定的元素  返回boolean值
        System.out.println(list);
    
        System.out.println("==========删==========");
        System.out.println(list);
        list.poll(); //删除表头
        System.out.println(list);
        list.pop(); //删除并返回表头
        System.out.println(list);
        //list.pollFirst();
        //list.pollLast();
        list.removeFirst();
        list.removeLast();
        //list.remove();
        System.out.println(list);
        System.out.println("==========改==========");
        list.set(2,8);
        System.out.println(list);
        System.out.println("=======查==========");
        Integer peek = list.peek();
        System.out.println(peek);
        System.out.println(list.element());
        Integer integer = list.peekFirst();
        System.out.println(integer);
        Integer integer1 = list.peekLast();
        System.out.println(integer1);
        Integer first = list.getFirst();
        System.out.println(first);
        Integer last = list.getLast();
        System.out.println(last);
        int i = list.indexOf(2);
        System.out.println(i);
        int i1 = list.lastIndexOf(2);
        System.out.println(i1);
        boolean contains = list.contains(5);
        System.out.println(contains);
        int size = list.size();
        System.out.println(size);
        
        /* 类似removeFirst与pollFirst,addFirst与offerFirst,peekFirst与getFirst的区别
        * */
        //list.clear();
        System.out.println(list);
        System.out.println(list.removeFirst()); //报错：Exception in thread "main" java.util.NoSuchElementException
        //所以一般使用这种删除方式
        //System.out.println(list.pollFirst());  //清空后没有元素，那么就没有第一个元素，返回null
    
        //集合的遍历：
        System.out.println("---------------------");
        //普通for循环：
        for(int j = 0;j<list.size();j++){
            System.out.println(list.get(j));
        }
        System.out.println("---------------------");
        //增强for：
        for(Integer s:list){
            System.out.println(s);
        }
        System.out.println("---------------------");
        //迭代器：
        /*Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }*/
        //下面这种方式好，节省内存
        for(Iterator<Integer> it = list.iterator(); it.hasNext();){
            System.out.println(it.next());
        }
    }
}
